home *** CD-ROM | disk | FTP | other *** search
/ Netware Super Library / Netware Super Library.iso / pgm_tool / lu62 / comm / pattach.c < prev    next >
C/C++ Source or Header  |  1995-07-03  |  2KB  |  70 lines

  1. #include <dos.h>
  2. #include <stdio.h>
  3.  
  4. union REGS inregs, outregs;
  5. struct SREGS segregs;
  6.  
  7. struct crec {
  8.                 void far *asc_rcv_exit;
  9.                 short asc_speed;
  10.                 unsigned char asc_width ; /* word width */
  11.                 unsigned char asc_parity; /* port & parity */
  12.                 unsigned char asc_stops; /* number of stop bits */
  13.             } rec;
  14.  
  15. extern speed;
  16. extern width;
  17. extern parity;
  18. extern n_port;
  19. extern stop_num;
  20. extern void rout(void);
  21.  
  22. pattach(n,pdata,len)
  23.    char far *pdata;   /* RQB pointer */
  24.    int n;  /* 0-open,1-send,2-close */
  25.    int len; /* length of data */
  26.         {
  27.             unsigned short mask;
  28.             int i, j;
  29.             char far *p;
  30.  
  31.          if ( n == 0) {
  32.  
  33.             rec.asc_rcv_exit = rout;
  34.             rec.asc_speed = speed;
  35.             rec.asc_width = width; /* word length */
  36.             rec.asc_parity = parity ; /* parity yes, even */
  37.             mask = n_port;
  38.             mask = mask << 4;
  39.             rec.asc_parity = rec.asc_parity | mask;
  40.             rec.asc_stops = stop_num; /* 1 stop bit */
  41.  
  42.             /* Open COM1 */
  43.  
  44.             p = &rec;
  45.             inregs.x.dx = FP_OFF( p );
  46.             segregs.ds = FP_SEG( p );
  47.             inregs.h.ah = 0x00;
  48.             inregs.h.al = 0x50;
  49.  
  50.             int86x( 0x6e, &inregs, &outregs, &segregs);
  51.             return;
  52.         }  /*   open   */
  53.         if ( n == 1){
  54.             p = pdata-12;
  55.             i = len + 28;
  56.  
  57.             inregs.x.dx = FP_OFF( p );
  58.             segregs.ds = FP_SEG( p );
  59.             inregs.x.cx = i;
  60.             inregs.h.ah = 0x02;
  61.             int86x( 0x6e, &inregs, &outregs, &segregs);
  62.             return;
  63.        }   /*   send   */
  64.        if ( n == 2){
  65.             inregs.h.ah = 0x01;
  66.         inregs.h.al = n_port;
  67.             int86x( 0x6e, &inregs, &outregs, &segregs);
  68.        }  /*   close   */
  69. }
  70.